package JavaEE_notes.common_API.Network;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * TCP 通信练习 -   客户端
 * @author TaiZai
 * @data 2024/9/26 10:50
 */
public class TCP_Client {
    public static void main(String[] args) throws IOException {
        // 1、创建 Socket 对象，并同时请求与服务器程序的连接
        Socket socket = new Socket("127.0.0.1", 7878);

        // 创建一个独立的线程，负责随机从socket中接收服务端发送过来的数据
        new ClientReaderThread(socket).start();

        // 2、从 Socket 通信管道中得到一个字节输出流，用来发送数据给服务端
        OutputStream os = socket.getOutputStream();

        // 3、把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        // 4、开始写数据  单次发送
        // dos.writeUTF("Hello Server! I'm Client.");
        // dos.close();
        // socket.close();

        // 5、开始写数据  多次发送
        Scanner sc = new Scanner(System.in);
        while (true) {
            String input = sc.next();
            if (input.equals("exit")) {
                dos.close();
                socket.close();
                break;
            }

            dos.writeUTF(input);
            dos.flush(); // 保证数据发送到服务端  flush方法用于清空输出流中的所有缓冲区
        }
    }
}
